package com.xsd.singleton;

/**
 * @Description: 单例模式  懒汉式 (线程安全）
 * @Author: zhoufuzong
 * @Created: 2021-01-23 11:46:52
 * @Version: 1.1.0
 */

/**
 * 优缺点说明：
 * 1) 解决了线程不安全问题
 * 2) 效率太低了，每个线程在想获得类的实例时候，执行getInstance()方法都要进行
 * 同步。而其实这个方法只执行一次实例化代码就够了，后面的想获得该类实例，
 * 直接return就行了。方法进行同步效率太低
 * 3) 结论：在实际开发中，不推荐使用这种方式
 */
public class SingletonTest4 {

    public static void main(String[] args) {
       Singleton4 singleton3 = Singleton4.getInstance();
       Singleton4 singleton31 = Singleton4.getInstance();
        System.out.println(singleton3 == singleton31);
    }
}


class Singleton4{

    // 1. 构造器私有化
    private Singleton4(){
    }

    // 2. 本类内部创建对象实例
     private  static Singleton4 singleton ;

    public static synchronized   Singleton4 getInstance(){
        if(singleton==null){
            singleton = new Singleton4();
        }

        return  singleton;
    }

}
